
package com.jf.cloud.payment.mapper;

import com.jf.cloud.api.payment.vo.AccountDetailVO;
import com.jf.cloud.api.payment.vo.ShopAccountDetailVO;
import com.jf.cloud.payment.dto.AccountSearchDTO;
import com.jf.cloud.payment.model.RefundInfo;
import com.jf.cloud.payment.vo.RefundInfoVO;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 退款信息
 *
 * @author zz
 * @date 2021-03-15 15:26:03
 */
public interface RefundInfoMapper {

    /**
     * 获取退款信息列表
     * @return 退款信息列表
     */
    List<RefundInfo> list();

    /**
     * 根据退款信息id获取退款信息
     *
     * @param refundId 退款信息id
     * @return 退款信息
     */
    List<RefundInfo> listByRefundIdAndWxPay(@Param("refundId") Long refundId);

    /**
     * 保存退款信息
     * @param refundInfo 退款信息
     */
    int save(@Param("refundInfo") RefundInfo refundInfo);

    /**
     * 更新退款信息
     * @param refundInfo 退款信息
     */
    void update(@Param("refundInfo") RefundInfo refundInfo);

    /**
     * 根据退款信息id删除退款信息
     * @param refundId 退款单号
     */
    void deleteById(@Param("refundId") Long refundId);

    /**
     * 计算执行退款单的数量
     *
     * @param refundId 退款单号
     * @return 执行退款单的数量
     */
    int countByRefundId(@Param("refundId") Long refundId);

    /**
     * 根据时间参数获取退款账户详情
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 退款账户详情
     */
    AccountDetailVO getRefundAccountDetail(@Param("startTime") Date startTime, @Param("endTime") Date endTime);

    /**
     * 根据时间参数获取退款id列表
     * @param startTime
     * @param endTime
     * @return
     */
    List<Long> getRefundIdsByTime(@Param("startTime") Date startTime, @Param("endTime") Date endTime);

    /**
     * 根据时间参数获取退款详情
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 退款详情
     */
    List<RefundInfoVO> getRefundInfoVO(@Param("startTime") Date startTime, @Param("endTime") Date endTime);

    /**
     * 获取平台余额充值&购买会员
     * @param startTime
     * @param endTime
     * @return
     */
    ShopAccountDetailVO getPlatformAccountInfo(@Param("startTime") Date startTime, @Param("endTime") Date endTime);

    /**
     * 获取平台财务对账
     * @param accountSearchDTO
     * @return
     */
    List<RefundInfoVO> listRefundInfoVO(@Param("accountSearchDTO") AccountSearchDTO accountSearchDTO);


    /**
     * 通过payId更新退款信息
     *
     * @param refundInfo 退款信息
     */
    void updateByIdAndPayId(@Param("refundInfo") RefundInfo refundInfo);
}
